import type {AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse} from "axios";
import axios from "axios";
import {Message, Spin} from "@arco-design/web-vue";

// 从环境变量获取 API 基础地址（.env.development 中配置的 VITE_API_BASE_URL）
const baseURL = import.meta.env.VITE_API_BASE_URL

// 这里传的是一个对象
export const request: AxiosInstance = axios.create({
    // baseURL: baseURL === 'production' ? 'http://user-center.code.cn' : '/dev-api',
    baseURL: baseURL,
    timeout: 20000,  // 请求超时的毫秒数
    withCredentials: true, // 允许携带 cookies
    headers: {
        'Content-Type': 'application/json;charset=UTF-8',
    },
});

// 加载状态管理
/*let loadingCount = 0;
const showLoading = () => {
    if (loadingCount === 0) {
        Spin.show({
            tip: '加载中...',
            size: 'medium',
        });
    }
    loadingCount++;
};

const hideLoading = () => {
    loadingCount--;
    if (loadingCount === 0) {
        Spin.hide();
    }
};

// 请求拦截器
request.interceptors.request.use(
    // @ts-ignore
    (config: AxiosRequestConfig) => {
        // 1. 显示加载状态
        showLoading();

        // 2. 添加认证token
        const token = localStorage.getItem('token');
        if (token && config.headers) {
            config.headers.Authorization = `Bearer ${token}`;
        }

        // 3. GET请求添加时间戳防缓存
        if (config.method?.toLowerCase() === 'get' && config.params) {
            config.params.t = Date.now();
        }

        return config;
    },
    (error: AxiosError) => {
        // 隐藏加载状态
        hideLoading();

        // 请求配置错误提示
        Message.error({
            content: `请求错误: ${error.message || '未知错误'}`,
            duration: 3000,
        });
        return Promise.reject(error);
    }
);

// 响应拦截器
request.interceptors.response.use(
    (response: AxiosResponse) => {
        // 隐藏加载状态
        hideLoading();

        const { data } = response;

        // 假设后端统一响应格式为 { code: number, message: string, data: any }
        if (data.code !== 200) {
            // 业务错误提示
            Message.warning({
                content: data.message || '操作失败',
                duration: 3000,
            });
            return Promise.reject(data);
        }

        return data;
    },
    (error: AxiosError) => {
        // 隐藏加载状态
        hideLoading();

        // 网络错误处理
        if (!error.response) {
            Message.error({
                content: '网络连接异常，请检查网络',
                duration: 3000,
            });
            return Promise.reject(error);
        }

        // 服务器响应错误
        const status = error.response.status;
        switch (status) {
            case 401:
                // 未授权，清除token并跳转登录
                localStorage.removeItem('token');
                Message.error({
                    content: '登录已过期，请重新登录',
                    duration: 3000,
                });
                // 这里可以添加路由跳转逻辑，例如：
                // router.push('/login');
                break;
            case 403:
                Message.error({
                    content: '没有操作权限',
                    duration: 3000,
                });
                break;
            case 404:
                Message.error({
                    content: '请求的资源不存在',
                    duration: 3000,
                });
                break;
            case 500:
                Message.error({
                    content: '服务器内部错误',
                    duration: 3000,
                });
                break;
            default:
                Message.error({
                    content: `请求失败 (${status})`,
                    duration: 3000,
                });
        }

        return Promise.reject(error);
    }
);*/
